package dbconnector.impl;

import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;

/**
 * Klasa, ktora dziala w tle jako osobny watek i usuwa z bazy uslugi, ktorych waznosc wygasla
 *
 */
public class DbTimer extends Thread{
	//TODO - blad bo kazdy kontener ma swojego ewiktora / DbTimera
	private DBCollection coll;
	private long expiredTime;
	private boolean stop = false;
	
	/**
	 * 
	 * @param coll kolekcja, w ktorej przechowywane sa wpisy dotyczaceuslug
	 * @param expiredTime czas w milisekundach, po ktorym uslugi beda odrejestrowywane z bazy
	 */
	public DbTimer(DBCollection coll, long expiredTime){
		this.coll = coll;
		this.expiredTime = expiredTime;
	}
	
    public void run() {
		DBCursor cursor;
		DBObject queryResult;
		long tmpTime;
		
    	while(!stop){
    		//pobranie wszystkich wpisow z kolekcji
    		cursor = coll.find();
    		try {
    			while (cursor.hasNext()) {
    				queryResult = cursor.next();
    				tmpTime = (long) queryResult.get(ServiceInfoFieldsNames.TIME_STAMP);
    				//jesli wpis wygasl -> usuwamy z bazy
    				if((System.currentTimeMillis() - tmpTime) > expiredTime){
        				coll.remove(queryResult);
    				}
    			}
    		} finally {
    			cursor.close();
    		}
    		
    		try {
    			//przerwa w sprawdzaniu na 1/5 czasu wygasniecia uslugi
				sleep(expiredTime/5);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
    	}
    }
    
    public void quit(){
    	stop = true;
    }
	
}
